import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton, QLineEdit
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from mysql.connector import connect

# 创建应用程序对象
app = QApplication(sys.argv)

# 创建主窗口对象
window = QWidget()
layout = QVBoxLayout()

# 创建列表显示区域
list_widget = QListWidget()

# 创建数据库连接
config = {
    'user': 'root',
    'password': 'myy1910966344',
    'host': '127.0.0.1',
    'database': 'fruit'
}
connector = connect(**config)
cursor = connector.cursor()

# 查询正在销售的水果数据
cursor.execute("SELECT * FROM fruits WHERE status = 'fruit';")
rows = cursor.fetchall()

# 将数据添加到列表中
for row in rows:
    item = QStandardItemModel()
    item.setHorizontalHeaderLabels(['ID', 'Name', 'Price'])
    item.appendRow([QStandardItem(str(row[0])), QStandardItem(row[1]), QStandardItem(str(row[2]))])
    list_widget.addItem(item.item(0).text())
    list_widget.setItemModel(item)

# 添加删除按钮和添加按钮到布局中
delete_button = QPushButton('Delete')
add_button = QPushButton('Add')
delete_button.clicked.connect(lambda: delete_item(list_widget))
add_button.clicked.connect(lambda: add_item(list_widget))
layout.addWidget(list_widget)
layout.addWidget(delete_button)
layout.addWidget(add_button)
window.setLayout(layout)

# 显示主窗口并运行应用程序
window.show()
sys.exit(app.exec_())


def delete_item(list_widget):
    selected_items = list_widget.selectedItems()  # 获取被选中的项目列表
    if selected_items:  # 检查是否至少选择了一个项目
        selected_id = selected_items[0].text()  # 获取选中的项目的ID值（列表中的索引为0）
        cursor.execute("DELETE FROM fruits WHERE id = %s", (selected_id,))  # 执行删除操作并更新数据库中的数据
        connector.commit()  # 提交更改到数据库中
        print("Deleted item with ID:", selected_id)  # 打印删除成功的消息
    else:  # 如果没有选择任何项目，则显示一个消息提示用户选择一个项目进行删除操作
        print("Please select an item to delete.")
        return False  # 返回False以阻止删除操作继续执行，直到用户选择一个项目为止


def add_item(list_widget):
    name = input("Enter the name of the fruit: ")  # 从输入框获取新的水果名称
    price = input("Enter the price of the fruit: ")  # 从输入框获取新的水果价格（默认为单位元）
    new_item = QStandardItemModel()  # 创建一个新的模型对象用于表示新添加的水果数据
    new_item.setHorizontalHeaderLabels(['ID', 'Name', 'Price'])  # 设置模型中的列标题（不包括ID列）
    new_item.appendRow([QStandardItem('0'), QStandardItem(name),
                        QStandardItem(price)])  # 添加新水果数据到模型中，其中ID值为0表示新添加的数据条目不会被显示在列表中（即不占用空间）
    list_widget.addItem(new_item.item(1).text())  # 将新添加的水果数据添加到列表中并更新列表显示区域的数据模型对象（保持列表中只有实际销售的水果数据）
